Skip to main content

第09章 缓存和Redis

第9章 缓存和Redis

一、为什么缓存

  • 常见的一个问题是:数据库里面有buffer、ORM映射里面也有buffer作为缓冲区,那为什么要缓存呢?

  • 上面说的这两个缓存都不是你可以控制的,完全取决于他们自身,我们开发者管不了

  • 而使用redis,我就可以自己的控制缓存,非常好

  • 数据库里面的数据是表格,表格的对象经过ORM映射拿了过来好不容易转化为java对象,我为什么不把他存起来呢?这样还可以节省开销

  • 上面说的是数据库,假如我还有从文件系统里面读取的,nosql数据库里面的读取的东西、动态生成的网页、图片都可以 ,所以使用redis就都可以存储,redis完全在开发者的控制下。比如甚至双十一的时候,我可以趁用户访问量少的时候提前把可能卖爆的网页缓存出来,这样提高访问的速度

  • redis甚至还可以作为消息中间件,类似kafka的topic,他和卡夫卡的差别是redis里面的东西在内存里面

  • 数据库服务器对于内存要求比较高,而Tomcat服务器主要是CPU密集型,对于一些只读的数据,我从数据库拿到之后就缓存在本地,这样就可以更快的拿得到!

二、一致性哈希

  • 把hash的结果作为一个0-很大的数字,这些数字成环分布
  • 假想服务器放在这个这个环里面的几个节点,0代表环的开始,当计算的结果为0-服务器1的值的时候,放在服务器1,服务器1-服务器2的值的时候放在服务器2,这样围一个环
  • 假如要在服务器1和2之间,添加一个服务器1.5,那么原先计算的结果在服务器1-服务器1.5之间的数据就要迁移到服务器1.5上面,剩下的数据保持不变

三、redis

  • nosql数据库,内存型数据库
  • 可以有主从备份、集群化部署,
  • 什么东西放缓存:按照上课讲的,那就是:
    • 经常用到的东西
    • 经常涉及到读取操作的,而很少涉及到写的操作的
    • 中间计算的结果
    • 经常要写的东西不要放入缓存

四、分布式缓存

  • 为什么需要分布式缓存:因为一个机器的缓存可能不够,物理上多个机器,实际逻辑上是一个大的缓存,可以充分利用多个机器的内存
  • 稳定可以备份,可靠性增加